package br.com.truta.bd.dao;

import static br.com.truta.bd.DBUtils.close;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;

import br.com.truta.bd.ConnectionFactory;
import br.com.truta.bd.DaoException;
import br.com.truta.model.TipoDespesa;
import br.com.truta.util.Constantes;

public class TipoDespesaDAO {
	private TipoDespesaDAO() {
		super();
	}
	
	public static List<TipoDespesa> buscaTipoDespesa(int idUsuario) throws DaoException {
		PreparedStatement stmt = null;
		Connection con = null;
		ResultSet rs = null;
		
		List<TipoDespesa> listaTipoDespesa = new ArrayList<TipoDespesa>();

		try {

			// faz a conexao com o BD
			con = ConnectionFactory.getLocalMySQLConnection();
			stmt = con.prepareStatement(Constantes.SQL_SELECT_TIPO_DESPESA);
			stmt.setInt(1, idUsuario);

			rs = stmt.executeQuery();
			
			TipoDespesa tipoDespesa = null;

			while (rs.next()) {
				tipoDespesa = new TipoDespesa();
				tipoDespesa.setId(rs.getInt("ID"));
				tipoDespesa.setNome(rs.getString("NOME"));
				tipoDespesa.setIdUsuario(rs.getInt("ID_USUARIO"));
				
				listaTipoDespesa.add(tipoDespesa);
				
			}

		} catch (Exception e) {
			throw new DaoException("Erro em buscaTipoDespesa ", e);
		} finally {
			close(rs, stmt, con);
		}
		
		return listaTipoDespesa;
	}

	public static boolean insereTipoDespesa(TipoDespesa tipoDespesa) throws DaoException {
		PreparedStatement stmt = null;
		Connection con = null;
		boolean retorno = false;

		try {
			// Abre conexao com o BD User
			con = ConnectionFactory.getLocalMySQLConnection();

			//Prepara o Statement
			stmt = con.prepareStatement(Constantes.SQL_INSET_TIPO_DESPESA);

			//usuario, senha, nome, sobrenome, email
			stmt.setString(1, tipoDespesa.getNome());
			stmt.setInt(2, tipoDespesa.getIdUsuario());
			
			stmt.executeUpdate();

			retorno = true;
		} catch (Exception e) {
			retorno = false;
			throw new DaoException("Erro ao insereTipoDespesa", e);
		} finally {
			close(stmt, con);
		}
		return retorno;
	}
}
